//
//  SettingItemModel.h
//  AutoMate
//
//  Created by hao on 2018/3/1.
//  Copyright © 2018年 songlei. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@class SettingCell;

// cell右边为箭头时的图片名
#define CELL_ARROW_IMAGE_NAME @"mine_right_arrow"

// cell右边的控件类型, 默认每一个cell都带有箭头, 隐藏使用属性: hiddenArrow = YES
typedef NS_ENUM(NSInteger, CellRightViewType) {
    CellRightViewTypeNone,          // 只是cell最右边的控件为空
    CellRightViewTypeLabel,         // 显示描述标题的标签
    CellRightViewTypeArrow,         // 默认是箭头图标
    CellRightViewTypeImage,         // 自定义图片, 可添加选中图片
    CellRightViewTypeSwitch,        // 开关, 回调是CellRightViewClickBlock
    CellRightViewTypeTextField,     // 输入框, 回调是CellRightViewClickBlock
    CellRightViewTypeCustom         // 只自定义cell右边的view,非cell,如果自定义cell可以使用customCell属性
};

/**
struct RightViewFrame {
    CGFloat width;
    CGFloat height;
    CGFloat top;    // rightview.minY 到cell.minY的距离
    CGFloat right;  // rightview.maxX 到cell.maxX的距离，如果右边已经有视图，就是到该视图的距离
};
typedef struct CG_BOXABLE RightViewFrame RightViewFrame;

FOUNDATION_EXTERN CGFloat const RightViewFrameTopDefault; // 如果赋值给 RightViewFrame.top 则表示垂直(Y方向)居中
FOUNDATION_EXTERN CGFloat const RightViewFrameRightDefault; // 赋值给 RightViewFrame.right 则使用默认间距
*/
 
/** 回调优先级从高到低依次是: CellRightViewClickBlock -> CellOptionBlock -> targetController */
// 点击cell右边View的回调
typedef void(^CellRightViewClickBlock)(SettingCell *cell);
// 点击cell的回调
typedef void(^CellOptionBlock)(SettingCell *cell);

@interface SettingItemModel : NSObject

/**
 标题->箭头(其它样式)
 都可为空
 @param title             标题
 @param titleColor        标题颜色
 @param type              右边view的类型
 @param rightViewBlock    右边view点击的回调
 @param controller        cell点击跳转的控制器(如果与cellOptionBlock回调同时设置，都会执行)
 @return SettingItem模型
 */
+ (instancetype)settingItemDataWithTitle:(NSString *)title
                              titleColor:(UIColor *)titleColor
                                    type:(CellRightViewType)type
                          rightViewBlock:(CellRightViewClickBlock)rightViewBlock
                              controller:(Class)controller;

/**
 标题->详情图片->箭头(其它样式)
 都可为空
 @param title             标题
 @param titleColor        标题颜色
 @param detailImage       详情图片
 @param detailSelectImage 详情选中图片
 @param type              右边view的类型
 
 @return SettingItem模型
 */
+ (instancetype)settingItemDataWitTitle:(NSString *)title
                             titleColor:(UIColor *)titleColor
                            detailImage:(UIImage *)detailImage
                      detailSelectImage:(UIImage *)detailSelectImage
                                   type:(CellRightViewType)type
                             controller:(Class)controller;

/**
 标题图->标题->箭头(其它样式)
 都可为空
 @param icon             标题图
 @param title            标题
 @param titleColor       标题颜色
 @param type             右边view的类型
 @param rightViewBlock   右边view点击的回调
 @param controller       cell点击跳转的控制器(如果与cellOptionBlock回调同时设置，都会执行)
 
 @return SettingItem模型
 */
+ (instancetype)settingItemDataWithIcon:(UIImage *)icon
                                  title:(NSString *)title
                             titleColor:(UIColor *)titleColor
                                   type:(CellRightViewType)type
                         rightViewBlock:(CellRightViewClickBlock)rightViewBlock
                             controller:(Class)controller;

/**
 标题->描述->箭头(其它样式)
 都可为空
 @param title            标题
 @param titleColor       标题颜色
 @param detailTitle      描述
 @param detailTitleColor 描述颜色
 @param type             右边view的类型
 @param controller       cell点击跳转的控制器(如果与cellOptionBlock回调同时设置，都会执行)
 
 @return SettingItem模型
 */
+ (instancetype)settingItemDataWithTitle:(NSString *)title
                             titleColor:(UIColor *)titleColor
                            detailTitle:(NSString *)detailTitle
                       detailTitleColor:(UIColor *)detailTitleColor
                                   type:(CellRightViewType)type
                             controller:(Class)controller;

/**
 标题图->标题->描述->箭头(其它样式)
 都可为空
 @param icon             标题图
 @param title            标题
 @param titleColor       标题颜色
 @param detailTitle      描述
 @param detailTitleColor 描述颜色
 @param type             右边view的类型
 @param rightViewBlock   右边view点击的回调
 @param cellOptionBlock  cell点击回调
 @param controller       cell点击跳转的控制器(如果与cellOptionBlock回调同时设置，都会执行)
 
 @return SettingItem模型
 */
+ (instancetype)settingItemDataWithIcon:(UIImage *)icon
                                  title:(NSString *)title
                             titleColor:(UIColor *)titleColor
                            detailTitle:(NSString *)detailTitle
                       detailTitleColor:(UIColor *)detailTitleColor
                                   type:(CellRightViewType)type
                         rightViewBlock:(CellRightViewClickBlock)rightViewBlock
                        cellOptionBlock:(CellOptionBlock)cellOptionBlock
                             controller:(Class)controller;

/** 左右两边的间距， 默认是15 */
@property (nonatomic, assign) CGFloat   cellDefaultMargin;

/** 标题的名称 */
@property (nonatomic, copy)   NSString  *title;
/** 标题的颜色 */
@property (nonatomic, strong) UIColor   *titleColor;
/// 标题的样式，如果设置了该属性，则title和titleColor失效
@property (nonatomic, copy)   NSAttributedString *attrTitle;

/** 标题图片 */
@property (nonatomic, strong) UIImage   *icon;
/** 默认 (icon.width, icon.height) */
@property (nonatomic)         CGSize    iconSize;

/** 描述 */
@property (nonatomic, copy)   NSString  *detailTitle;
/** 描述的颜色 */
@property (nonatomic, strong) UIColor   *detailTitleColor;
/// 描述文本的样式，如果设置了该属性，则detailTitle和detailTitleColor失效
@property (nonatomic, copy)   NSAttributedString *attrDetail;

/** cell 右边的图片，可与箭头同时存在，如头像 */
@property (nonatomic, strong) UIImage   *detailImage;
/** cell 右边选中的图片 */
@property (nonatomic, strong) UIImage   *detailSelectImage;
/** 默认 (detailImage.width, detailImage.height) */
@property (nonatomic)         CGSize    detailImageSize;

/** 是否隐藏 右边的箭头 YES: 隐藏 NO: 不隐藏
 默认NO */
@property (nonatomic, assign) BOOL      hiddenArrow;
/** 是否选中 YES: 已选中 NO: 未选中
 CellRightViewType为可点击切换状态时可设置 */
@property (nonatomic, assign, getter=isSelected) BOOL selected;

/** cell的高度, 默认44.0 */
@property (nonatomic, assign) CGFloat                 rowHeight;

/** cell右边view的类型 */
@property (nonatomic, assign) CellRightViewType       rightViewType;
/** 自定义cell右边的视图 */
@property (nonatomic, strong) UIView                  *rightView;
/** 自定义cell右边的视图的宽高, 默认 Y 轴居中，右间距默认值， 优先级比’RightViewFrame‘高 */
@property (nonatomic)         CGSize                  rightViewSize;
/** 自定义X、Y、Width、Height，如果设置了‘rightViewSize’就不会在设置 */
//@property (nonatomic)         RightViewFrame          rightViewFrame;
/** 点击右边View的回调 */
@property (nonatomic, copy)   CellRightViewClickBlock rightViewClickBlock;

/** 点击cell的回调 */
@property (nonatomic, copy)   CellOptionBlock         cellOptionBlock;

/** 需要跳转的控制器 */
@property (nonatomic, assign) Class                   targetController;

/** 自定义cell */
@property (nonatomic, strong) UIView                  *customCell;

/** cell点击显示的高亮颜色， 不为空才会设置 */
@property (nonatomic, strong) UIColor                 *highlightColor;
/// 默认cell的背景颜色
@property (nonatomic, strong) UIColor                 *normalColor;

@end
